#include <bits/stdc++.h>
using namespace std;
using uint=unsigned int;
using ll=long long;
using ull=unsigned long long;
using i128=__int128;
const int N=1e6+5;

void solve(){
    string s1,s2,s3;
    cin>>s1>>s2>>s3;
    int len1=s1.size(),len2=s2.size(),len3=s3.size();
    if(len1+len2!=len3){
        cout<<"NO"<<endl;
        return;
    }
    vector<vector<bool>> vis(len1+1,vector<bool>(len2+1,false));
    queue<pair<int,int>> q;
    q.push({0,0});
    vis[0][0]=true;
    bool found=false;
    while(!q.empty()){
        auto [i,j]=q.front();
        q.pop();
        if(i==len1&&j==len2){
            found=true;
            break;
        }
        int k=i+j;
        if(i<len1&&s1[i]==s3[k]){
            if(!vis[i+1][j]){
                vis[i+1][j]=true;
                q.push({i+1,j});
            }
        }
        if(j<len2&&s2[j]==s3[k]){
            if(!vis[i][j+1]){
                vis[i][j+1]=true;
                q.push({i,j+1});
            }
        }
    }
    cout<<(found?"YES":"NO")<<endl;
    return;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t;
    cin>>t;
    while(t--)solve();

    return 0;
}

// #include <bits/stdc++.h>
// using namespace std;

// void solve() {
//     string s1, s2, s3;
//     cin >> s1 >> s2 >> s3;
//     int len1 = s1.size(), len2 = s2.size(), len3 = s3.size();
//     if (len1 + len2 != len3) {
//         cout << "NO" << endl;
//         return;
//     }
    
//     vector<bool> dp(len2 + 1, false);
//     dp[0] = true;
    
//     for (int j = 1; j <= len2; ++j) {
//         dp[j] = dp[j-1] && (s2[j-1] == s3[j-1]);
//     }
    
//     for (int i = 1; i <= len1; ++i) {
//         dp[0] = dp[0] && (s1[i-1] == s3[i-1]);
//         for (int j = 1; j <= len2; ++j) {
//             dp[j] = (dp[j] && s1[i-1] == s3[i+j-1]) || (dp[j-1] && s2[j-1] == s3[i+j-1]);
//         }
//     }
    
//     cout << (dp[len2] ? "YES" : "NO") << endl;
// }

// int main() {
//     ios::sync_with_stdio(false);
//     cin.tie(nullptr);
//     cout.tie(nullptr);
//     int t;
//     cin >> t;
//     while (t--) solve();
//     return 0;
// }

// // 题目：拉链问题

// // 描述：
// // 给定三个字符串，判断第三个字符串是否由前两个字符串构成。前两个字符可以任意组合，但不能改变的相对顺序。
// // 输入格式
// //     第1行，测试样例个数n
// //     第2-ｎ行，待验证的三个字符串
// // 输出格式
// //     n行, YES 或者 NO，分别表示可以或者不可以。